package com.apply.leetcode.puzzle203;

/**
 * 表示节点
 */
public class ListNode {

    public int val;
    public ListNode next;
    public ListNode(int x) {
        val = x;
    }

    /**
     * 把传入的数组构造成链表
     * 当前的ListNode的头节点
     * @param arr
     */
    public ListNode(int[] arr) {
        if (arr == null || arr.length == 0) {
            throw new IllegalArgumentException("arr can not be empty!");
        }
        // 当前节点为头节点
        this.val = arr[0];
        ListNode cur = this;

        // 将数组转化为链表
        for (int i = 1; i < arr.length; i++) {
            // 创建一个新的节点（从数组下标为1的数据开始）
            cur.next = new ListNode(arr[i]);
            // 将当前节点的下一个几点设置为新的当前节点（也就是指针向后移动了）
            cur = cur.next;
        }
    }
    @Override
    public String toString() {
        StringBuilder res = new StringBuilder();
        /*
            注意: 现在打印的时候已经有一条链条了；
            所以我们就是移动指针来打印节点, 注意使用的while循环
         */
        ListNode cur = this;
        while (cur != null) {
            res.append(cur.val + "->");
            cur = cur.next;
        }
        res.append("NULL");
        return res.toString();
    }
}
